Typical computer storage devices, such as hard disk drives (HDDs), solid state drives (SSDs), and hybrid drives, have controllers that receive data access requests from host computers and perform programmed computing tasks to implement the requests in ways that may be specific to the media and structure configured in the storage devices, such as rigid rotating disks coated with magnetic material in the hard disk drives, integrated circuits having memory cells in solid state drives, and both in hybrid drives.
When a computer storage device is attached to a host computer, the host computer may use a standardized logical device interface protocol to address the computer storage device in a way independent from the specific media implementation of the storage device.
For example, Non-Volatile Memory Host Controller Interface Specification (NVMHCI), also known as NVM Express (NVMe), specifies the logical device interface protocol for accessing non-volatile storage devices via a Peripheral Component Interconnect Express (PCI Express or PCIe) bus.
A PCI-SIG Single Root I/O Virtualization and Sharing Specification defines extensions to PCIe. The extensions allow a software component to share PCIe hardware resources via accessing virtual functions implemented in the PCIe hardware. An NVMe specification suggests that a controller that supports Single Root Input/Output Virtualization (SR-IOV) should implement fully compliant NVMe virtual functions.